package org.hadoop.spark

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.SparkSession

object RddToBean1 {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf();
    conf.setMaster("local[*]");
    conf.setAppName("RDDToBean");
    val spark: SparkSession = SparkSession.builder().config(conf).getOrCreate();
    val sc: SparkContext = spark.sparkContext;
    //读取文件
    import spark.implicits._;
    //步2：读取文件
    val rdd: RDD[String] = sc.textFile("file:///D:/a/stud.txt");
    //步3：第一次使用map对每一行进行split，第二次使用map将数据封装到Bean中,最后使用toDF转换成DataFrame
    val df = rdd.map(_.split("\\s+")).map(arr => {
      Stud(arr(0).toInt, arr(1), arr(2).toInt, arr(3));
    }).toDF();
    //步4：显示或是保存数据
    df.show();
    spark.close();
  }

  /** 步1：声明JavaBean，并直接声明主构造方法 * */
  case class Stud(id: Int, name: String, age: Int, sex: String) {
    /** 声明无参数的构造，调用主构造方法 * */
    def this() = this(-1, null, -1, null);
  }
}
